package com.ingerprint;

import android.os.Bundle;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.biometric.BiometricPrompt;
import androidx.core.content.ContextCompat;

import java.util.concurrent.Executor;

/**
 * @author zjs
 */
public class MainActivity extends AppCompatActivity {

    // 生物识别提示，用于管理生物识别对话框的显示和认证过程
    private BiometricPrompt biometricPrompt;
    // 生物识别提示信息，包含指纹认证对话框的设置选项
    private BiometricPrompt.PromptInfo promptInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        // 获取主执行器，用于在主线程执行任务
        Executor executor = ContextCompat.getMainExecutor(this);
        // 创建生物识别提示对象，传入当前活动，执行器和生物识别认证回调
        biometricPrompt = new BiometricPrompt(MainActivity.this,
                executor, new BiometricPrompt.AuthenticationCallback() {
            //当生物识别认证过程中发生严重错误时，比如无法读取生物特征数据、生物识别框架不可用等情况，会触发onAuthenticationError方法。
            @Override
            public void onAuthenticationError(int errorCode,
                                              @NonNull CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                Toast.makeText(getApplicationContext(),"Authentication error: " + errString, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                Toast.makeText(getApplicationContext(),"验证成功", Toast.LENGTH_SHORT).show();
                // 这里可以添加认证成功后的逻辑处理
            }

            //当生物识别认证过程中失败时，即用户的生物特征（比如指纹）未能成功验证时
            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                Toast.makeText(getApplicationContext(), "Authentication failed",Toast.LENGTH_SHORT).show();
            }
        });
        // 创建生物识别提示信息对象，设置指纹认证对话框的标题、副标题和取消按钮文本
        promptInfo = new BiometricPrompt.PromptInfo.Builder()
                .setTitle("指纹认证")
                .setSubtitle("请使用指纹进行认证")
                .setNegativeButtonText("取消")
                .build();
        // 查找布局中的按钮，并设置点击事件监听器
        findViewById(R.id.authenticate_button).setOnClickListener(view -> {
            biometricPrompt.authenticate(promptInfo);
        });
    }
}
